package day1227;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class TestY {
    public static void main(String[] args) {
        JFrame window=new JFrame();//1. JFrame窗口/教室

        JPanel pane=new JPanel();//2.JPanel面板 /桌子

        ImageIcon img=new ImageIcon("images/背景.jpg");
        //4. ImageIcon图片/IDea

        //5.标签包含图片
        JLabel label=new JLabel(img);//3.JLabel标签/电脑

        pane.setLayout(null);//设置面板的布局方式为null。(没有布局方式，用xy坐标点设置元素的位置)
        label.setSize(480,800);
        label.setLocation(0,0);


        ArrayList<JButton> btns=createCards();

        putBtns(0,6,7, btns  ,  pane, 30,100);
        putBtns(0+42,5,6, btns,pane, 60,133);
        putBtns(0+42+30,4,6, btns,pane, 60-15,166);
        checkBtns(btns);
        ArrayList<JButton> though = new ArrayList<>();
        addMouseAction(btns,though);

        //6.面板上放标签//桌子上放电脑
        pane.add(label);
        //7.窗口包含面板/教室包含桌子
        window.add(pane);
        //8.设置窗口(宽高， 可见性)
        window.setSize(480,800);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);//Visible可见性(true-可见)
    }

    private static ArrayList<JButton> createCards() {
        String[] names = {"刷子","剪刀","叉子","奶瓶","干草","手套","树桩"
                          ,"棉花","毛线","水桶","火",  "玉米","白菜","草",  "萝卜","铃铛"};
//      2. ImageIcon img=new ImageIcon("文件夹名字/图片名字")
//      3.创建很多按钮也存入到ArrayList中
//        int index=1;
        ArrayList<JButton> btns=new ArrayList<JButton>();
        for (int i = 1; i <= 6 ; i++) {
            for(int j=0; j< names.length; j++){
                ImageIcon imgName1=new ImageIcon("images/"+names[j]+".png");
                ImageIcon imgName2=new ImageIcon("images/"+names[j]+"2.png");
                JButton btn=new JButton(imgName1);
                btn.setSize(59, 66);
                btn.setName(names[j]);
                btn.setDisabledIcon(imgName2);
                btn.setEnabled(false);
                btns.add(btn);
            }
        }
        return btns;
    }


    static void putBtns(int start, int row ,int col, ArrayList btns, JPanel pane, int x, int y){
        for(int i=0;i<row*col;  i++){
            //  96     ==  96 到达cards
            if (i+start >= btns.size()){
                //到达cards末尾就结束
                System.out.println("没有此按钮");
                return;
            }
            JButton b=(JButton) btns.get(i+start);//取一个
            b.setLocation(x + i%col*59,  y+i/col*66);
            //设置位置
            pane.add(b,0);//将取出的按钮 JButton  b放到JPanel p上//0表示次序(表示把按钮b放在面板pane的上边 )
        }
    }

    private static void checkBtns(ArrayList<JButton> btns) {
        //1.从btns所有按钮中取出一个
        for (int i = 0; i < btns.size(); i++) {
            //从btns所有按钮中取出一个
            JButton aBtn=btns.get(i);
            //先将此按钮设置为可用(h后边用另一个循环判断它是否被覆盖，如果被覆盖就修改为不可用)
            aBtn.setEnabled(true);
            //用另一个内循环取出第i位后边的所有按钮，和第i位的按钮判断坐标位置。
            for (int j = i+1; j < btns.size(); j++) {
                JButton bBtn=btns.get(j);
                /*int x1=aBtn.getX()-59;
                int x2=aBtn.getX()+59;
                int y1=aBtn.getY()-66;
                int y2=aBtn.getY()-66;*/
                //如果满足被付噶idea条件，就将Enabled修改以为false，让当前的第i个按钮不可用
                if(aBtn.getX()-59 < bBtn.getX()  && bBtn.getX() < aBtn.getX()+59 &&
                        aBtn.getY()-66 < bBtn.getY()  && bBtn.getY() < aBtn.getY()+66    ){
                    aBtn.setEnabled(false);
                }
            }
        }
    }



    /**
     * 为每个牌增加点击事件
     * @param btns 全部的按钮
     * @param though 底下的槽子
     */
    private static void addMouseAction(ArrayList<JButton> btns, ArrayList<JButton> though) {
        //1.用for循环从所有按钮中取出一个按钮来(给此按钮设置点击事件)
        for (int i=0 ;i<btns.size(); i++) {
            //1.1.从cards取出一个按钮
            JButton btn = btns.get(i);
            //1.2.用匿名内部类的格式编写一段点击事件的代码
            ActionListener ada=new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JButton selected=(JButton) e.getSource();
                    if (though.size()==7){
                        JOptionPane.showMessageDialog(selected,"槽子满了,游戏结束，请下次重试");
                        return;
                    }
                    //从上边的三层按钮中删除点击的按钮
                    btns.remove(selected);
                    //去除按钮上的动作事件
                    ActionListener lis=selected.getActionListeners()[0];
                    selected.removeActionListener(lis);

                    selected.setLocation(20+though.size()*63, 642);
                    //检查所有的按钮是否被覆盖(有被覆盖就将其设置为不可用)
                    checkBtns(btns);
                    //将选中的按钮放到槽子中，并重新排列槽子中按钮的位置
                    updateThough(though,selected);
                }
            };
            btn.addActionListener(ada);
        }
    }

    /**
     * 更新槽子中牌的显示
     */
    public static  void updateThough(ArrayList<JButton> though, JButton selected) {
        //1. 对槽子中的牌进行排序
        int index=-1;
        for (int i=0; i<though.size(); i++){
            JButton card = though.get(i);
            if (card.getName().equals(selected.getName())){
                //System.out.println(card.getName() +","+selected.getName() +"--"+i);
                //如果though槽子中有selected按钮，就将其添加到though操作的第i位置
                though.add(i, selected);//槽子里和当前点击的按钮有相同元素，就放入到第i个位置
                index=i;
                break;
            }
        }

        //2.如果没找到，就将selected按钮添加到though操作的最后位置
        if (index==-1){
            though.add(selected);//放到though的最后
        }

        //3 消除连续的3张牌，如果槽子中有相同的按钮
        if(index != -1 && though.size()-index >= 3){
            JButton nextNextBtn = though.get(index+2);
            if (selected.getName().equals(nextNextBtn.getName())){
                //Parent 父，是当前按钮所在的面板
                //从though集合中删除
                JButton delBtn1=though.remove(index);

                //从界面JPanel中也删除点击的按钮Selected
                //用按钮获取它的上级就是JPanel
                JPanel panel = (JPanel)selected.getParent();
                //从JPanel中删除当前这个按钮
                panel.remove(delBtn1);

                //从集合中删除
                JButton delBtn2=though.remove(index);
                //从界面JPanel中也删除
                panel.remove(delBtn2);


                //从集合中删除
                JButton delBtn3=though.remove(index);
                //从界面JPanel中也删除
                panel.remove(delBtn3);
                //重新绘制panel，解决删除的残影
                panel.repaint();
            }
        }

        //4.将剩余的按钮重新设置位置(因为不能让中间空着)
        //2. 根据排序的结果， 重新设置 每个牌的 Location
        for (int i=0; i<though.size(); i++){
            JButton card = though.get(i);
            int x = 25 + 62 * i;
            int y = 642;
            card.setLocation(x, y);
        }
    }



}

/*
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add(0,"C");
        System.out.println(list);
    }
 */